/**
 * JS модель Этапа
 * Содержит все необходимые атрибуты
 * @param {type} params
 * @returns {undefined}
 */
function Chunk(params){
	params = params || {};
	var self = this;
	
	// Сохраняемые свойства объекта Chunk
	self.id = ko.observable(params.id || null);
	self.name = ko.observable(params.name || '');
	self.project = ko.observable(null);
	self.issues = ko.observableArray([]);
	all.issues.subscribe(function(issues){
		var chunkIssues = [];
		ko.utils.arrayForEach(issues, function(issue){
			if(self.isSame(issue.chunk()) && !issue.isRejected() && !issue.isUnscheduled()){
				chunkIssues.push(issue);
			}
		});
		chunkIssues.sort(compareIssues);
		self.issues(chunkIssues);
	});
	self.id.subscribe(function(id){
		if(self.id() !== null)
			self.issues.id_chunk = self.id();	
	});
	self.id.valueHasMutated();
	
	// Вычисляемые свойства объекта Chunk
	// Возвращает суммарную информацию об этапе
	self.info = ko.computed(function(){
		var duration = 0;
		var number = self.issues().length;
		ko.utils.arrayForEach(self.issues(), function(issue){
			duration += parseFloat(issue.estimate());
		});
		return number + ' ' + declensionOfNumber(number, ['задача', 'задачи', 'задач']) + ': ' + duration + ' ч';
	});
	// Список url-адресов
	self.urls = ko.computed(function(){
		return {
			create: '/api/chunk/create',
			update: '/api/chunk/update/id/' + self.id(),
			delete: '/api/chunk/delete/id/' + self.id()
		};
	});
	// Возвращает объект данных для запроса
	// на создание/обновление объекта в БД
	self.getRequestData = function(){
		var data = {};
		if(self.id() !== null){
			data.id = self.id();
		}
		data.name = self.name();
		if(self.project() !== null)
			data.id_project = self.project().id();
		return {Chunk:data};
	};	
	// Расширяем функционал модели общими методами (см. /js/models/model.js)
	_extend(self);
}